package com.own.component.common.util;

import com.own.component.common.base.entity.po.BaseBean;
import com.own.component.common.base.mapper.BaseMapper;
import com.own.component.common.util.list.ListUtil;
import lombok.NonNull;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * MapperUtil
 *
 * @author chenxueli
 * @date 2021/3/12 13:56
 */
@Component
public final class MapperUtil {

    /**
     * 批量插入数据
     *
     * @param mapper     插入的sql持久化对象
     * @param sourceList 待插入的数据列表
     * @param <T>        对象类型
     * @return 总影响行数
     */
    public <T extends BaseBean> int batchInsert(BaseMapper<T> mapper, List<T> sourceList) {
        return batchInsert(mapper, sourceList, 1000);
    }

    /**
     * 批量插入数据
     *
     * @param mapper     插入的sql持久化对象
     * @param sourceList 待插入的数据列表
     * @param length     分项长度
     * @param <T>        对象类型
     * @return 总影响行数
     */
    public <T extends BaseBean> int batchInsert(@NonNull BaseMapper<T> mapper, @NonNull List<T> sourceList, int length) {
        return ListUtil.groupList(sourceList, length, mapper::insertBatch).stream().reduce(0, Integer::sum);
    }

}
